// // 唯一性
// // 即便传入的描述的值str相同也是不同的值
// console.log(Symbol('1') === Symbol('1'))
// // false
// // 想复用? 可以使用
// // 全局变量的方法来实现

// // for方法 维护了一个内部的注册表 为字符串和Symbol的值提供了一一对应的关系
// const s1 = Symbol.for('foo')
// const s2 = Symbol.for('foo')
// console.log(s1 === s2)

// // 传入的值不是字符串也会变成字符串
// console.log(
//   Symbol.for(true) === Symbol.for('true')
// );
// // true
// const s3 = Symbol('foo')
// const s4 = Symbol('foo')
// console.log(s3 === s4)
// // false
// // ------------------------------------------------------------
// // 内置Symbol常量作为内部Symbol方法的表示 标识符主要有:
// // Symbol.iterator/Symbol.hasInstance实现一些JS中内置的接口
// // 字符串实现会重复Symbol不会
// const obj = {
//   // 自定义toString标签 toStringTag就是内置的Symbol常量
//   [Symbol.toStringTag]: 'XObject'
//   // [object XObject]
// }
// console.log(obj.toString())
// // 对象的toString标签[object Object]
// ------------------------------------------------------------
// 内置的属性名 for in / Object.key无法获取 / JSON.stringify也会忽略
const obj = {
  [Symbol.for(true)]: 'symbol value',
  foo: 'normal value',
  func() {
    console.log(this[Symbol.for('true')]);
    // symbol value
    // 想访问到symbol value只能.for或者赋值
  }
}
obj.func()
// for (var i in obj) {
//   console.log(i)
// }
// console.log(Object.keys(obj))
// console.log(JSON.stringify(obj))
// // foo
// // [ 'foo' ]
// // {"foo":"normal value"}
// // Symbol属性特别适合作为私有属性
// // Object.getOwnPropertySymbols(obj) 获取Symbol()类型的键名
// // Obbject.keys 获取字符串键名
// console.log(Object.getOwnPropertySymbols(obj))
// // [ Symbol() ]
